package 多线程;

/*
    创建多线程的方式二:实现Runnable接口
         定义子类,实现Runnable接口
         子类中重写Runnable接口中的run方法
         通过Thread类含参构造器创建线程对象
         将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中
         调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法

     继承方式和实现方式的区别
        (1)区别
             继承Thread:线程代码存放Thread子类run方法中
             实现Runnable:线程代码存在接口的子类的run方法中
        (2)实现方式的好处
             避免了单继承的局限性
             多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源
 */
public class ThreadTest05 {
    public static void main(String[] args) {
        //创建实现类的对象
        MyThread03 mt = new MyThread03();
        //将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中
        Thread t1 = new Thread(mt);
        t1.setName("线程1:");
        t1.start();
        //再启动一个线程
        Thread t2 = new Thread(mt);
        t2.setName("线程2:");
        t2.start();
    }
}

//实现Runnable接口
class MyThread03 implements Runnable{

    //重写Runnable接口中的run方法
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if(i % 2 == 0){
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
    }
}

